
package com.bstek.urule.runtime.rete;

import com.bstek.urule.model.GeneralEntity;

import java.util.Collection;
import java.util.Map;

/**
 * @author Jacky.gao
 * @since 2015年1月9日
 */
public class ObjectTypeActivity extends AbstractActivity {
    private Class<?> typeClass;
    private String clazz;

    public ObjectTypeActivity(String clazz) {
        this.clazz = clazz;
    }

    public ObjectTypeActivity(Class<?> typeClass) {
        this.typeClass = typeClass;
    }

    public Collection<FactTracker> enter(EvaluationContext context, Object obj, FactTracker tracker, Map<String, Object> variableMap) {
        return visitPahs(context, obj, tracker, variableMap);
    }

    public boolean support(Object object) {
        if (typeClass == null && clazz == null) {
            return true;
        }
        if (object instanceof GeneralEntity) {
            GeneralEntity generalEntity = (GeneralEntity) object;
            String targetClass = generalEntity.getTargetClass();
            if (clazz != null) {
                if (targetClass.equals(clazz)) {
                    return true;
                }
            } else {
                if (targetClass.equals(typeClass.getName())) {
                    return true;
                }
            }
        } else if (typeClass != null) {
            Class<?> c = object.getClass();
            if (typeClass.isAssignableFrom(c) || typeClass.getName().equals(c.getName())) {
                return true;
            }
        }
        return false;
    }

    @Override
    public boolean orNodeIsPassed() {
        return false;
    }

    @Override
    public void reset() {
    }
}
